<!DOCTYPE HTML>
<html lang="zh-CN">




<head>
    <meta charset="utf-8">
    <meta name="keywords" content="&#39;计算机网络复习&#39;, 深度学习 故障诊断 Java">
    <meta name="description" content="河海大学 | 计算机与信息学院 | 信号与信息处理">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
    <meta name="renderer" content="webkit|ie-stand|ie-comp">
    <meta name="mobile-web-app-capable" content="yes">
    <meta name="format-detection" content="telephone=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
    <!-- Global site tag (gtag.js) - Google Analytics -->


    <title>&#39;计算机网络复习&#39; | 世庆的博客</title>
    <link rel="icon" type="image/png" href="/shiqing/favicon.png">

    <link rel="stylesheet" type="text/css" href="/shiqing/libs/awesome/css/all.css">
    <link rel="stylesheet" type="text/css" href="/shiqing/libs/materialize/materialize.min.css">
    <link rel="stylesheet" type="text/css" href="/shiqing/libs/aos/aos.css">
    <link rel="stylesheet" type="text/css" href="/shiqing/libs/animate/animate.min.css">
    <link rel="stylesheet" type="text/css" href="/shiqing/libs/lightGallery/css/lightgallery.min.css">
    <link rel="stylesheet" type="text/css" href="/shiqing/css/matery.css">
    <link rel="stylesheet" type="text/css" href="/shiqing/css/my.css">

    <script src="/shiqing/libs/jquery/jquery.min.js"></script>

    <script src="https://sdk.jinrishici.com/v2/browser/jinrishici.js" charset="utf-8"></script>
<meta name="generator" content="Hexo 6.3.0"></head>




    <body>
        <header class="navbar-fixed">
    <nav id="headNav" class="bg-color nav-transparent">
        <div id="navContainer" class="nav-wrapper container">
            <div class="brand-logo">
                <a href="/shiqing/" class="waves-effect waves-light">
                    
                    <img src="/shiqing/medias/logo.png" class="logo-img" alt="LOGO">
                    
                    <span class="logo-span">世庆的博客</span>
                </a>
            </div>
            

<a href="#" data-target="mobile-nav" class="sidenav-trigger button-collapse"><i class="fas fa-bars"></i></a>
<ul class="right nav-menu">
  
  <li class="hide-on-med-and-down nav-item">
    
    <a href="/shiqing/" class="waves-effect waves-light">
      
      <i class="fas fa-home" style="zoom: 0.6;"></i>
      
      <span>首页</span>
    </a>
    
  </li>
  
  <li class="hide-on-med-and-down nav-item">
    
    <a href="/shiqing/tags" class="waves-effect waves-light">
      
      <i class="fas fa-tags" style="zoom: 0.6;"></i>
      
      <span>标签</span>
    </a>
    
  </li>
  
  <li class="hide-on-med-and-down nav-item">
    
    <a href="/shiqing/categories" class="waves-effect waves-light">
      
      <i class="fas fa-bookmark" style="zoom: 0.6;"></i>
      
      <span>分类</span>
    </a>
    
  </li>
  
  <li class="hide-on-med-and-down nav-item">
    
    <a href="/shiqing/archives" class="waves-effect waves-light">
      
      <i class="fas fa-archive" style="zoom: 0.6;"></i>
      
      <span>归档</span>
    </a>
    
  </li>
  
  <li class="hide-on-med-and-down nav-item">
    
    <a href="/shiqing/about" class="waves-effect waves-light">
      
      <i class="fas fa-user-circle" style="zoom: 0.6;"></i>
      
      <span>关于</span>
    </a>
    
  </li>
  
  <li class="hide-on-med-and-down nav-item">
    
    <a href="/shiqing/contact" class="waves-effect waves-light">
      
      <i class="fas fa-comments" style="zoom: 0.6;"></i>
      
      <span>留言板</span>
    </a>
    
  </li>
  
  <li class="hide-on-med-and-down nav-item">
    
    <a href="/shiqing/friends" class="waves-effect waves-light">
      
      <i class="fas fa-address-book" style="zoom: 0.6;"></i>
      
      <span>友情链接</span>
    </a>
    
  </li>
  
  <li>
    <a href="#searchModal" class="modal-trigger waves-effect waves-light">
      <i id="searchIcon" class="fas fa-search" title="搜索" style="zoom: 0.85;"></i>
    </a>
  </li>
</ul>


<div id="mobile-nav" class="side-nav sidenav">

    <div class="mobile-head bg-color">
        
        <img src="/shiqing/medias/logo.png" class="logo-img circle responsive-img">
        
        <div class="logo-name">世庆的博客</div>
        <div class="logo-desc">
            
            河海大学 | 计算机与信息学院 | 信号与信息处理
            
        </div>
    </div>

    

    <ul class="menu-list mobile-menu-list">
        
        <li class="m-nav-item">
	  
		<a href="/shiqing/" class="waves-effect waves-light">
			
			    <i class="fa-fw fas fa-home"></i>
			
			首页
		</a>
          
        </li>
        
        <li class="m-nav-item">
	  
		<a href="/shiqing/tags" class="waves-effect waves-light">
			
			    <i class="fa-fw fas fa-tags"></i>
			
			标签
		</a>
          
        </li>
        
        <li class="m-nav-item">
	  
		<a href="/shiqing/categories" class="waves-effect waves-light">
			
			    <i class="fa-fw fas fa-bookmark"></i>
			
			分类
		</a>
          
        </li>
        
        <li class="m-nav-item">
	  
		<a href="/shiqing/archives" class="waves-effect waves-light">
			
			    <i class="fa-fw fas fa-archive"></i>
			
			归档
		</a>
          
        </li>
        
        <li class="m-nav-item">
	  
		<a href="/shiqing/about" class="waves-effect waves-light">
			
			    <i class="fa-fw fas fa-user-circle"></i>
			
			关于
		</a>
          
        </li>
        
        <li class="m-nav-item">
	  
		<a href="/shiqing/contact" class="waves-effect waves-light">
			
			    <i class="fa-fw fas fa-comments"></i>
			
			留言板
		</a>
          
        </li>
        
        <li class="m-nav-item">
	  
		<a href="/shiqing/friends" class="waves-effect waves-light">
			
			    <i class="fa-fw fas fa-address-book"></i>
			
			友情链接
		</a>
          
        </li>
        
        
        <li><div class="divider"></div></li>
        <li>
            <a href="https://github.com/sqtian-hhu/" class="waves-effect waves-light" target="_blank">
                <i class="fab fa-github-square fa-fw"></i>Fork Me
            </a>
        </li>
        
    </ul>
</div>


        </div>

        
            <style>
    .nav-transparent .github-corner {
        display: none !important;
    }

    .github-corner {
        position: absolute;
        z-index: 10;
        top: 0;
        right: 0;
        border: 0;
        transform: scale(1.1);
    }

    .github-corner svg {
        color: #0f9d58;
        fill: #fff;
        height: 64px;
        width: 64px;
    }

    .github-corner:hover .octo-arm {
        animation: a 0.56s ease-in-out;
    }

    .github-corner .octo-arm {
        animation: none;
    }

    @keyframes a {
        0%,
        to {
            transform: rotate(0);
        }
        20%,
        60% {
            transform: rotate(-25deg);
        }
        40%,
        80% {
            transform: rotate(10deg);
        }
    }
</style>

<a href="https://github.com/sqtian-hhu/" class="github-corner tooltipped hide-on-med-and-down" target="_blank"
   data-tooltip="Fork Me" data-position="left" data-delay="50">
    <svg viewBox="0 0 250 250" aria-hidden="true">
        <path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>
        <path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2"
              fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path>
        <path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z"
              fill="currentColor" class="octo-body"></path>
    </svg>
</a>
        
    </nav>

</header>

        



<div class="bg-cover pd-header post-cover" style="background-image: url('/shiqing/medias/featureimages/12.jpg')">
    <div class="container" style="right: 0px;left: 0px;">
        <div class="row">
            <div class="col s12 m12 l12">
                <div class="brand">
                    <h1 class="description center-align post-title">&#39;计算机网络复习&#39;</h1>
                </div>
            </div>
        </div>
    </div>
</div>




<main class="post-container content">

    
    <link rel="stylesheet" href="/shiqing/libs/tocbot/tocbot.css">
<style>
    #articleContent h1::before,
    #articleContent h2::before,
    #articleContent h3::before,
    #articleContent h4::before,
    #articleContent h5::before,
    #articleContent h6::before {
        display: block;
        content: " ";
        height: 100px;
        margin-top: -100px;
        visibility: hidden;
    }

    #articleContent :focus {
        outline: none;
    }

    .toc-fixed {
        position: fixed;
        top: 64px;
    }

    .toc-widget {
        width: 345px;
        padding-left: 20px;
    }

    .toc-widget .toc-title {
        padding: 35px 0 15px 17px;
        font-size: 1.5rem;
        font-weight: bold;
        line-height: 1.5rem;
    }

    .toc-widget ol {
        padding: 0;
        list-style: none;
    }

    #toc-content {
        padding-bottom: 30px;
        overflow: auto;
    }

    #toc-content ol {
        padding-left: 10px;
    }

    #toc-content ol li {
        padding-left: 10px;
    }

    #toc-content .toc-link:hover {
        color: #42b983;
        font-weight: 700;
        text-decoration: underline;
    }

    #toc-content .toc-link::before {
        background-color: transparent;
        max-height: 25px;

        position: absolute;
        right: 23.5vw;
        display: block;
    }

    #toc-content .is-active-link {
        color: #42b983;
    }

    #floating-toc-btn {
        position: fixed;
        right: 15px;
        bottom: 76px;
        padding-top: 15px;
        margin-bottom: 0;
        z-index: 998;
    }

    #floating-toc-btn .btn-floating {
        width: 48px;
        height: 48px;
    }

    #floating-toc-btn .btn-floating i {
        line-height: 48px;
        font-size: 1.4rem;
    }
</style>
<div class="row">
    <div id="main-content" class="col s12 m12 l9">
        <!-- 文章内容详情 -->
<div id="artDetail">
    <div class="card">
        <div class="card-content article-info">
            <div class="row tag-cate">
                <div class="col s7">
                    
                    <div class="article-tag">
                        
                            <a href="/shiqing/tags/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80/">
                                <span class="chip bg-color">计算机基础</span>
                            </a>
                        
                    </div>
                    
                </div>
                <div class="col s5 right-align">
                    
                    <div class="post-cate">
                        <i class="fas fa-bookmark fa-fw icon-category"></i>
                        
                            <a href="/shiqing/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/" class="post-category">
                                计算机网络
                            </a>
                        
                    </div>
                    
                </div>
            </div>

            <div class="post-info">
                
                <div class="post-date info-break-policy">
                    <i class="far fa-calendar-minus fa-fw"></i>发布日期:&nbsp;&nbsp;
                    2020-11-12
                </div>
                

                

                

                

                
            </div>
        </div>
        <hr class="clearfix">

        
        <!-- 是否加载使用自带的 prismjs. -->
        <link rel="stylesheet" href="/shiqing/libs/prism/prism.css">
        

        

        <div class="card-content article-card-content">
            <div id="articleContent">
                <h2 id="计算机网络之基础篇"><a href="#计算机网络之基础篇" class="headerlink" title="计算机网络之基础篇"></a>计算机网络之基础篇</h2><p>一、计算机网络概述<br>二、物理层<br>三、数据链路层<br>四、网络层<br>五、传输层<br>六、应用层</p>
<span id="more"></span>


<h3 id="一、计算机网络概述"><a href="#一、计算机网络概述" class="headerlink" title="一、计算机网络概述"></a>一、计算机网络概述</h3><p> 1.什么是计算机网络<br>  计算机网络主要由一些通用的、可编程的硬件互连而成，通过这些硬件，可以传送不同类型的数据，并且可以支持广泛和日益增长的应用。</p>
<p> 2.计算机网络的分类<br>  按照网络的作用范围：广域网（WAN）、城域网（MAN）、局域网（LAN）<br>  按照网络使用者：公用网络、专用网络</p>
<p> 3.计算机网络的发展历史<br>  互联网的发展历史：<br>    第一阶段：单个网络ARPANET，交换机+电脑<br>    第二阶段：三层结构互联网，主干网+地区网+校园网<br>    第三阶段：多层次ISP(Internet Service Provider，网络服务提供商)互联网，主干ISP+地区ISP+校园&#x2F;公司&#x2F;家庭…<br>  中国互联网的发展历史：<br>    1980年开始互联网实验，1989年第一个公立网络建立运行，1994年接入国际互联网。</p>
<p> 4.网络协议<br>  简称协议，是为了进行网络中的数据交换而建立的规则、标准或约定。<br>  网络协议的三要素<br>    语法：数据与控制信息的结构或格式<br>    语义：需要发出何种控制信息，完成何种动作以及做出何种响应<br>    同步：事件实现顺序的详细说明</p>
<p> 5.计算机网络的层次结构<br>  层次结构设计的基本原则：<br>    各层之间是相互独立的；<br>    每一层需要有足够的灵活性；<br>    各层之间完全解耦。<br>  OSI七层模型：并没有成为广泛使用的标准模型，标准制定周期过长，设计不合理。<br>    物理层-&gt;数据链路层-&gt;网络层-&gt;传输层-&gt;会话层-&gt;表示层-&gt;应用层<br>  TCP&#x2F;IP四层模型：<br>    网络接口层-&gt;网络层-&gt;传输层-&gt;应用层</p>
<p>  通用五层模型:<br>    应用层：直接为用户的应用进程提供服务（HTTP、FTP等）<br>    传输层：向上一层的进行通信的两个进程之间提供一个可靠的端对端服务，使它们看不见运输层以下的数据通信的细节。（TCP、UDP）<br>    网络层：选择合适的路由，使发送站的运输层所传下来的分组能够正确无误地按照地址找到目的站，并交付给目的站的运输层。<br>            网络层将运输层产生的报文或用户数据报封装成分组（IP数据报）或包进行传送。<br>    数据链路层：将网络层交下来的IP数据报组装成帧，在两个相邻结点间的链路上”透明“的传送以帧为单位的数据。<br>                每一帧包括数据和必要的控制信息。在收到数据时，控制信息使收到端直到哪个帧从哪个比特开始和结束。<br>    物理层：物理层的任务就是透明地传送比特流。（注意：传递信息的物理媒体，如双绞线、同轴电缆、光缆等，是在物理层的下面，当做第0 层。）<br>            物理层还要确定连接电缆插头的定义及连接法。</p>
<p> 6.计算机网络的性能指标<br>  速率：bps&#x3D;bit&#x2F;s<br>  时延：发送时延、传播时延、排队时延、处理时延<br>  往返时间RTT：数据报文在端到端通信中的来回一次的时间。</p>
<h3 id="二、物理层"><a href="#二、物理层" class="headerlink" title="二、物理层"></a>二、物理层</h3><p> 1.物理层的作用：物理层的任务就是透明地传送比特流。在计算机之间通过高低电频来传送0,1这样的电信号。<br>   （注意：传递信息的物理媒体，如双绞线、同轴电缆、光缆等，是在物理层的下面，当做第0 层。）<br>    物理层还要确定连接电缆插头的定义及连接法。</p>
<p> 2.信道的基本概念：信道是往一个方向传输信息的媒体，一条通信电路包含一个发送信道和一个接受信道。<br>  单工通信信道：只能一个方向通信，没有反方向反馈的信道；<br>  半双工通信信道：双方都可以发送和接受信息，但不能同时发送也不能同时接收；<br>  全双工通信信道：双方都可以同时发送和接收。<br> 3.信道的分用-复用技术：大大提升信道的利用率，分为频分复用、时分复用、波分复用、码分复用。</p>
<h3 id="三、数据链路层"><a href="#三、数据链路层" class="headerlink" title="三、数据链路层"></a>三、数据链路层</h3><pre><code>数据链路层使用的信道主要有以下两种类型：点对点信道  广播信道
</code></pre>
<p> 1.数据链路层的作用：将网络层交下来的IP数据报组装成帧，在两个相邻结点间的链路上”透明“的传送以帧为单位的数据。<br>    每一帧包括数据和必要的控制信息。<br>    在收到数据时，控制信息使收到端知道哪个帧从哪个比特开始和结束。</p>
<p> 2.使用点对点信道的数据链路层<br>    链路 ：从一个结点到相邻结点的一段物理线路<br>    数据链路 ：把实现这些协议的硬件和软件加载链路上<br>            现在最常用的方法是使用适配器（即网卡）来实现这些协议的硬件和软件。一般的适配器都包括了数据链路层和物理层这两层的功能。</p>
<pre><code>封装成帧：“帧”是数据链路层数据的基本单位，就是在一段数据的前后分别添加首部（帧开始符SOH 01）和尾部（帧结束符EOT 04），然后就构成了一个帧。
         （数据部分&lt;=长度限制MTU）首部和尾部的一个重要作用就是进行帧定界。
          帧定界是分组交换的必然要求
          最大传输单元MTU(Maximum Transmission Unit)，数据链路层的数据帧不是无限大的，数据帧长度受MTU限制。
          
透明传输：“透明”是指即使控制字符在帧数据中，但是要当做不存在去处理。
          为了达到透明传输（即传输的数据部分不会因为包含SOH和EOT而出错），在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(十六进制1B)
          透明传输避免消息符号与帧定界符号相混淆
          
差错检测：现实通信链路中比特在传输中会产生差错，传输错误的比特占比称为误码率BER，为了保证可靠性，通常通过循环冗余检验CRC来做差错检测。
          差错检测防止无效数据帧浪费后续路由上的传输和处理资源
          循环冗余检验码：根据传输或保存的数据而产生固定位数校验码。

点对点协议 PPP
    PPP协议的组成部分：
        一个将 IP 数据报封装到串行链路的方法
        链路控制协议 LCP (Link Control Protocol)
        网络控制协议 NCP (Network Control Protocol)
    PPP 协议的工作状态：
        链路静止-建立物理层-链路建立-pc发LCP-NCP分配IP地址-链路打开，网络层建立。（释放时倒过来）
</code></pre>
<p> 3.使用广播信道的数据链路层<br>    广播信道是一种一对多的通信，局域网使用的就是广播信道</p>
<pre><code>局域网的数据链路层被拆分为了两个子层
    逻辑链路控制LLC子层：与传输媒体无关
    媒体接入控制MAC子层：和局域网都对LLC子层来说是透明的
CSMA/CD 协议
    以太网采用CSMA/CD协议的方式来协调总线上各计算机的工作。在使用CSMA/CD协议的时候，一个站不可能同时进行发送和接收，
    因此使用CSMA/CD协议的以太网不可能进行全双工通信而只能进行双向交替通信（半双工）。
    
CSMA/CD是载波监听多点接入/碰撞检测（Carrier Sense Multiple Access with Collision Detection）的缩写：
    “多点接入”就是计算机以多点接入（动态媒体接入控制）的方式连接在一根总线上。
    ”载波监听“就是”发送前先监听”，即每一个站在发送数据前先要检测一下总线是否有其他站在发送数据，如有则暂时不要发送数据，要等到信道为空闲。
    “碰撞检测”就是“边发送边监听”，即适配器边发送数据边检测信道上的信号电压的变化情况。当一个站检测到的信号电压摆动值超过一定的门限值时，
              就认为总线上至少有两个站同时在发送数据，表明产生了碰撞，就要立即停止发送，免得继续浪费网络资源，然后等待一段随机时间后再次发送。
              把总线上的单程端到端传播时延记为τ，A 发送数据后，最迟要经过2τ才能知道自己发送的数据和其他站发送的数据有没有发生碰撞。
    
</code></pre>
<p> 4.以太网<br>  以太网协议：是一种使用广泛的局域网技术，是一种应用于数据链路层的协议，使用以太网可以完成相邻设备的数据帧传输<br>  MAC地址：每一个设备都拥有唯一的MAC地址，共48位，使用十六进制表示。高位24位：厂家，低位24位由厂家自行指派<br>  MAC帧的格式：常用的以太网MAC帧格式有两种标准 ： DIX Ethernet V2 标准IEEE 的 802.3 标准。V2使用较多。<br>               以太网V2的MAC帧较为简单，有五个字段组成。前两个字段分别为6字长的目标地址和源地址字段。<br>               第三个字段是2字节的类型字段，用来标志上一层使用的是什么协议，以便把收到的MAC帧的数据上交给上一层的这个协议。<br>               后面数据字段46~1500字节，FCS字段4个字节。<br>  扩展的以太网：<br>        在物理层扩展—集线器：<br>            现在，双绞线以太网成为以太网的主流类型，扩展主机和集线器之间的距离的一种简单方法就是使用光纤(通常是一对光纤)和一对光纤调制解调器。<br>            光纤调制解调器的作用，是进行电信号和光信号的转换。<br>        在数据链路层扩展—网桥（自学习算法）：<br>            网桥工作在数据链路层，它根据MAC帧的目的地址对收到的帧进行转发或过滤。<br>            当网桥收到一个帧时，并不是向所有的接口转发这个帧，而是检查此帧的目的MAC地址，然后再确定将该帧转发到哪一个接口，或者是把它丢弃(即过滤)。<br>            最简单的网桥有两个接口，复杂些的网桥可能有更多的接口。两个以太网通过网桥连接起来后，就成为一个覆盖范围更大的以太网，而原来的每个以太网就可以称为一个网段(segment)。<br>        虚拟局域网-交换机：<br>            多接口网桥即交换式集线器常称为以太网交换机。利用以太网交换机可以很方便地实现虚拟局域网，<br>            虚拟局域网协议允许在以太网的帧格式中插入一个4字节的标识符，称为 VLAN 标记。</p>
<h3 id="四、网络层"><a href="#四、网络层" class="headerlink" title="四、网络层"></a>四、网络层</h3><p> 1.网际协议IP<br>    网际协议IP是TCP&#x2F;IP体系中两个最重要的协议之一，也是最重要的因特网标准协议之一。与IP协议配套是用的四个协议：<br>        地址解析协议ARP：是解决同一个局域网上的主机或路由器的IP地址和硬件MAC地址的映射问题。<br>        逆地址解析协议RARP：是解决同一个局域网上的主机或路由器的硬件地址和IP地址的映射问题。<br>        网际控制报文协议ICMP：提供差错报告和询问报文，以提高IP数据交付成功的机会<br>        网际组管理协议IGMP：：用于探寻、转发本局域网内的组成员关系。</p>
<p>  2.虚拟互连网络<br>    因为没有一种单一的网络能够适应所有的用户需求，所以网络互连也变得困难，所以需要一些中间设备：<br>    物理层中间设备：中继器、集线器（Hub）<br>        中继器：<br>            用于扩展局域网网段的长度。由于中继器只在两个局域网网段间实现电器信号的恢复和整形，因此它仅用于连接相同的局域端。<br>            优点有：安装简便、使用方便、价格便宜<br>        集线器：<br>            可看作一种特殊的多路中继器，也具有信号放大功能。使用双绞线的以太网多用Hub扩大网络，同时也便于网络维护。<br>            以集线器为中心的网络优点是当网络系统中某条线路或某结点出现故障时，不会影响网上其他结点的正常工作。</p>
<pre><code>数据链路层中间设备：网桥或交换机
    网桥：
        网桥要分析帧地址字段，决定是否要把帧转发到另一个网络段上。
        确切的说，网桥工作于MAC子层，只要两个网络MAC子层以上的协议相同，都可以用网桥互连。
        网桥检查帧的源地址和目的地址，如果目的地址和源地址不在同一个网络段上，就把帧转发到另一个网络段上；
        若两个地址在同一个网络段上，则不转发，所以网桥能起到过滤帧的作用。
    交换机：
        交换机是一个具有简化、低价、高性能和高端口秘籍特点的交换产品，它是按每一个包中的MAC地址相对简单地决策信息转发，
        而这种转发决策一般不考虑包中隐藏的更深地其他信息。交换机转发数据的延迟很小，操作接近单个局域网性能，远超过了普通桥接的转发性能。
        常见的交换机有存储转发、快速转发和碎片丢弃三种交换模式。

网络层中间设备：路由器(router)
    路由器：
        用于连接多个逻辑上分开的网络。当数据从一个子网传输到另一个子网时，可通过路由器来完成。路由器具有很强的异种网互连能力。
        通常把网络层地址信息叫做网络逻辑地址，把数据链路层地址信息叫做物理地址。路由器最主要的功能就是选择路径。
        在路由的存储其中维护着一个路径表，记录各个网络的逻辑地址，用于识别其他网络。
        路由器的功能还包括过滤、存储转发、流量管理和介质转换等。

网络层以上的中间设备：网关(gateway)
    网关：
        在一个计算机网络中，当连接不同类型而协议差别又较大的网络时，则要选用网关设备。
        网关的功能体现在OSI模型的最高层，他将协议进行转换，将数据数据重新分组，以便两个不同类型的网络系统之间进行通信。
        一般来说，网关只进行一对一的转换，或者少数几个特定应用协议的转换，所以网关很难实现通用的协议转换。
</code></pre>
<p> 3.IP地址<br>    IP 地址就是给每个连接在因特网上的主机（或路由器）分配一个在全世界范围是唯一的 32 位的标识符。由因特网名字与号码指派公司ICANN进行分配。<br>    IP地址编制方法的三个阶段：<br>        分类的IP地址<br>        子网的划分<br>        构成超网<br>    每一类地址都由 网络号 net-id和 主机号 host-id组成<br>    主机号中全0表示本地网络地址，全1表示广播地址	</p>
<pre><code>分类的IP地址
    A类
        由1字节的网络地址和3字节主机地址组成
        网络地址的最高位必须是“0“，可指派的网络数为128-2，减2的原因是0.0.0.0对应“本网络”，另外一个是127.0.0.1是本地软件的回环地址，用于测试自己电脑IP地址是否可用。
        地址范围1.0.0.0到126.255.255.255
        最大主机数为2563-2=16777214台，减2的原因是全0的主机号字段代表该IP地址是&quot;本主机“，全1表示”所有的“，表示该网络上的所有主机
    B类
        由2字节的网络地址和2字节主机地址组成
        网络地址的最高位必须是“10”，可指派的网络数为 214 -1，因为最高位为10，所以不存在全0全1的情况，但是B类网络地址128.0.0.0是不指派的，可指派最小网络地址是128.1.0.0
        地址范围128.0.0.0-191.255.255.255
        最大主机数为2562-2=65534台，减2同样是全0全1情况。
    C类
        由3字节的网络地址和1字节主机地址组成
        网络地址的最高位必须是“110”，可指派的网络数为221-1，192.0.0.0不指派，最小可指派网络地址是192.0.1.0
        地址范围192.0.0.0-223.255.255.255
        最大主机数为256-2=254台，减2同样是全0全1情况。
    D类
        D类是多播地址，“lll0”开始
    E类
        E类地址保留为今后使用，“llll0”开头
    
硬件地址是数据链路层和物理层使用的地址
IP地址是网络层和以上各层使用的地址，是一种逻辑地址	
IP地址放在IP数据报的首部，而硬件地址放在MAC帧的首部。当数据报放入数据链路层的MAC帧中后，整个IP数据报就成为MAC帧的数据，因而在数据链路层看不见数据报的IP地址。
</code></pre>
<p> 4.地址解析协议ARP<br>    ARP是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。<br>    每一个主机都设有一个ARP高速缓存(ARP cache)，里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。<br>    如果所要找的主机和源主机不在同一个局域网上，那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址，然后把分组发送给这个路由器，让这个路由器把分组转发给下一个网络。	</p>
<p> 5.IP数据报<br>    一个IP数据报由首部（20 字节+可选字段）和数据两部分组成<br>    分成片段分别添加首部1，首部2，首部3… 称为分组<br>    分组转发<br>        (1) 从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N。<br>        (2) 若网络 N 与此路由器直接相连，则把数据报直接交付目的主机 D；否则是间接交付，执行(3)。<br>        (3) 若路由表中有目的地址为 D 的特定主机路由，则把数据报传送给路由表中所指明的下一跳路由器；否则，执行(4)。<br>        (4) 若路由表中有到达网络 N 的路由，则把数据报传送给路由表指明的下一跳路由器；否则，执行(5)。<br>        (5) 若路由表中有一个默认路由，则把数据报传送给路由表中所指明的默认路由器；否则，执行(6)<br>        (6) 报告转发分组出错。</p>
<p> 6.划分子网<br>    划分子网纯属一个单位内部的事情，单位对外仍然表现为没有划分子网的网络。<br>    划分子网的方法是从主机号借用若干个位作为子网号。<br>    路由器在收到IP数据报后，按目标网络号和子网号定位目标子网</p>
<p> 7.构造超网（无分类编址CIDR）<br>    CIDR消除了传统的A、B、C类地址以及划分子网的概念，用网络前缀代替网络号和子网号，后面的部分指明主机。<br>    因此，CIDR使IP地址从三级编址(使用子网掩码)，又回到了两级编址，但这已是无分类的两级编址。<br>    CIDR把网络前缀相同的连续的IP地址组成一个”CIDR地址块”只要知道CIDR地址块中的任何一个地址，<br>    就可以知道这地址块的起始地址(即最小地址)和最大地址，以及地址块中的地址数。<br>    地址掩码：是一连串的1和0组成，而1的个数就是网络前缀长度。在斜线记法中。斜线后面的数字就是地址掩码中1的个数。<br>    构成超网：由于一个CIDR地址块中含有很多地址，所以在路由表中就利用CIDR地址块来查找目标网络，这种地址的聚合常称为路由聚合，也称构成超网。</p>
<p> 8.网际控制报文协议ICMP<br>    为了更有效地转发IP数据报和提高交付成功的机会，在网际层使用了ICMP，ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。<br>    ICMP报文的种类：<br>        ICMP差错报告报文<br>            终点不可达<br>            源点抑制(Source quench)<br>            时间超过<br>            参数问题<br>            改变路由（重定向）(Redirect)<br>        ICMP询问报文<br>            回送请求和回答报文<br>            时间戳请求和回答报文<br>    具体应用：<br>        PING：使用ICMP回送请求和回答报文，测试两个主机之间的连通性<br>        Traceroute：跟踪一个分组从源点到终点的路径，使用了ICMP时间超过差错报告报文</p>
<p> 9.路由选择协议<br>    两大类路由选择协议：<br>        内部网关协议IGP：一个自治系统内部使用的路由选择协议。有多种协议，如 RIP 和OSPF 协议。<br>        外部网关协议EGP：一个自治系统的边界，将路由选择信息传递到另一个自治系统中。目前使用的就是BGP</p>
<pre><code>RIP协议的优缺点：
    RIP 存在的一个问题是当网络出现故障时，要经过比较长的时间才能将此信息传送到所有的路由器。
    RIP 协议最大的优点就是实现简单，开销较小。
    RIP 限制了网络的规模，它能使用的最大距离为 15（16 表示不可达）。
    路由器之间交换的路由信息是路由器中的完整路由表，因而随着网络规模的扩大，开销也就增加。
RIP是一种分布式的基于距离向量的路由选择协议，其主要特点：	
    仅和相邻路由器交换信息。
    按固定的时间间隔交换路由信息，例如，每隔30秒。
OSPF最主要的特征就是使用分布式的链路状态协议，其主要特点：	
    使用洪泛法向本自治系统中所有路由器发送信息。
    发送的信息是与本路由器相邻的所有路由器的链路状态。
    只有当链路状态发生变化时，路由器才用洪泛法向所有路由器发送此信息。
BGP是不同自治系统的路由器之间交换路由信息的协议，它采用路径向量路由选择协议，其主要特点：	
    自治系统AS之间的路由选择必须考虑有关策略。
    BGP只能力求寻找一条能够到达目的网络且比较好的路由，而并非要寻找一条最佳路由。
    
</code></pre>
<h3 id="五、传输层"><a href="#五、传输层" class="headerlink" title="五、传输层"></a>五、传输层</h3><p> 1.传输层协议概述<br>    传输层为应用进程之间提供端到端的逻辑通信（但网络层是为主机之间提供逻辑通信）<br>    传输层还要对收到的报文进行差错检测<br>    传输层需要有两种不同的运输协议，即面向连接的 TCP 和无连接的 UDP		<br>    两个主要协议	<br>        用户数据报协议 UDP(User Datagram Protocol)<br>            UDP 在传送数据之前不需要先建立连接。对方的运输层在收到 UDP 报文后，不需要给出任何确认。<br>            虽然 UDP 不提供可靠交付，但在某些情况下 UDP 是一种最有效的工作方式。<br>        传输控制协议 TCP(Transmission Control Protocol)<br>            TCP 则提供面向连接的服务。TCP 不提供广播或多播服务。由于 TCP 要提供可靠的、面向连接的运输服务，因此不可避免地增加了许多的开销。<br>            这不仅使协议数据单元的首部增大很多，还要占用许多的处理机资源。</p>
<pre><code>传输层的端口：
    TCP/IP的运输层的端口用一个 16 位端口号进行标志
    端口号只具备本地意义，即端口号只是为了标志本计算机应用层中的各进程。
客户发起通讯请求时，必须先知道对方服务器的IP地址和端口号，传输层的端口号分为下面三大类：
熟知端口号，数值一般为 0~1023。
    一些常用的数值端口号：
    FTP 21
    LELNET 23
    SMTP 25
    DNS 53
    TFTP 69
    HTTP 80
    SNMP 161
    SNMP(trap) 162
登记端口号，数值为1024~49151，为没有熟知端口号的应用程序使用的。
客户端口号或短暂端口号，数值为49152~65535，留给客户进程选择暂时使用。
</code></pre>
<p> 2.用户数据报协议 UDP<br>    UDP 是无连接的，即发送数据之前不需要建立连接。<br>    UDP 使用尽最大努力交付，即不保证可靠交付，同时也不使用拥塞控制<br>    UDP 是面向报文的<br>    UDP 没有拥塞控制，很适合多媒体通信的要求。<br>    UDP 支持一对一、一对多、多对一和多对多的交互通信<br>    UDP 的首部开销小，只有 8 个字节</p>
<p> 3.传输控制协议 TCP<br>    TCP 是面向连接的运输层协议<br>    每一条 TCP 连接只能有两个端点(endpoint)，每一条 TCP 连接只能是点对点的（一对一）<br>    TCP 提供可靠交付的服务<br>    TCP 提供全双工通信<br>    面向字节流</p>
<pre><code>TCP的连接： 
    TCP连接是一条虚连接(逻辑连接)，并不是真正的物理连接
    套接字：套接字=(IP地址：端口号)    IP地址拼接上端口号，例如(192.168.1.1:80)
    每一条TCP连接唯一被通信两个端点(两个套接字)所确定：TCP连接::=&#123;socket1,socket2&#125; = &#123;(IP1:port1),(IP2:port2)&#125;
    TCP连接的端点不是进程，而是套接字
    同一个IP地址可以由多个不同的TCP连接，而同一个端口也能出现在多个不同TCP连接中
</code></pre>
<p> 4.可靠传输的工作原理：		<br>    理想传输条件：<br>        传输信道不产生差错<br>        不管发送方以多快的速度发送数据，接收方总是来得及处理收到的数据	<br>    （1）停止等待协议：<br>        停止等待：每发送完一个分组就停止发送，等待对方确认，在收到确认后再发送下一个分组<br>        出现差错时，A只要超过一段时间没收到确认，就默认发送的分组丢失而重传之前的分组，就是超时重传<br>        注意：<br>         (1)A发送完一个分组后，必须暂时保留已发送分组的副本，只有在收到相应确认后才删除<br>         (2)分组和确认都需要编号，才能明确哪个分组收到确认，哪个没收到<br>         (3)超时计时器的重传时间应比数据在分组传输的平均往返时间更长一些	<br>        确认丢失：B返回的确认丢失时，A没有收到确认，超时重传，B丢弃重复的分组，再返回一次确认信息<br>        确认迟到：A超时重传了确认信息还没有收到，A重传，B收到后重新返回确认，A收到确认后传下一个，收到迟到的确认什么也不做</p>
<pre><code>（2）连续ARQ协议：
    发送方维持发送窗口，位于发送窗口内的分组都可以连续发送出去，而不需要等待对方确认，这样信道利用率就提高了。
    收到一个确认后发送窗口向前滑动。
    ARQ规定，发送方每收到一个确认，就把发送窗口滑动一个分组位置，接收方采用累积确认方式，在收到几个分组后，对按序到达的最后一个分组发送确认
    优点：容易实现，确认丢失也不必重传
    缺点：不能向发送方反映出接收方已经正确收到的所有分组信息	
    
</code></pre>
<p> 5.TCP报文段的首部格式<br>    (1)源端口和目的端口：各占2字节，分别是源端口号和目的端口号<br>    (2)序号：占4字节，TCP中传输的数据流中的每一字节都有一个编号。序号字段的值是本报文段所发送的数据的第一个字节的序号<br>    (3)确认号：占4字节，是期望收到对方下一个报文段的第一个数据字节的序号<br>    确认号&#x3D;N，则表明到序号N-1为止所有数据都正确收到<br>    (4)数据偏移：占4位，指出TCP报文段的数据起始处距离TCP报文段的起始处有多远<br>    (5)保留：占6位，保留为今后使用<br>    (6)紧急URG：当URG&#x3D;1时，表明紧急指针字段有效，告诉系统此报文中有紧急数据，应尽快传送，而不采用原来的按排队顺序来传送<br>    (7)确认ACK：当ACK&#x3D;1时确认号字段有效，TCP规定，在连接建立后所有数据报文段都把ACK置为1<br>    (8)推送PSH：当收到PSH&#x3D;1的报文时，就尽快交付接收应用进程，而不再等到整个缓存都填满后再向上交付<br>    (9)复位RST：当RST&#x3D;1时，表明TCP连接中出现严重差错，必须释放连接，然后重新建立连接<br>    (10)同步SYN：在连接建立时用来同步序号；当SYN&#x3D;1而ACK&#x3D;0时，表明这是一个连接请求报文，对方若同一建立连接，则应在响应报文中使SYN&#x3D;1，ACK&#x3D;1<br>    (11)终止FIN：用来释放一个连接，当FIN&#x3D;1时，表示此报文段的发送方已经发送完毕，并要求释放连接<br>    (12)窗口：占2字节，指的是发送本段报文段的一方的接收窗口，窗口值作为接收方让对方设置其发送窗口的依据；窗口字段明确指出了现在允许对方发送的数据量，窗口值经常动态变化<br>    (13)校验和：占2字节，检验和字段检验的范围包括首部和数据两部分<br>    (14)紧急指针：占2字节，在URG&#x3D;1时才有意义，指出本报文段中的紧急数据的字节数<br>    (15)选项：长度可变，最长40字节</p>
<pre><code>最大报文段长度(MSS)：是每一个TCP报文段中的数据字段的最大长度，并不是整个TCP报文段的最大长度，是TCP报文段长度-TCP首部长度
</code></pre>
<p> 6.TCP可靠传输的实现<br>    以字节为单位的滑动窗口：<br>        发送窗口表示：在没有收到B的确认时，A可以连续把窗口内的数据都发送出去<br>        发送窗口中的序号表示允许发送的序号，窗口越大，发送方就可以在收到对方确认前连续发送更多的数据，因此可能获得更高的传输效率<br>        收到新的确认后发送窗口前沿向前移动，没有收到新的确认或收到新的确认但对方通知的窗口缩小了，会使发送窗口前沿不动<br>        发送缓存存放：<br>            发送应用程序发送给发送方TCP准备发送的数据<br>            TCP已发送出但尚未收到确认的数据<br>        接收方缓存存放：<br>            按序到达的、但尚未被接受应用程序读取的数据<br>            未按序到达的数据</p>
<p> 7.TCP的流量控制<br>    （1）利用滑动窗口实现流量控制：<br>            流量控制：让发送方发送速率不要太快，让接收方来得及接收<br>            滑动窗口的单位：字节<br>            持续计时器：解决盲等死锁。只要TCP连接的一方收到对方的零窗口通知，就启动持续计时器，若计时器到期，就发送一个零窗口探测报文段，<br>                        而对方就在确认这个报文段时给出了现在的窗口值，若窗口值仍是零，那么收到报文的一方就重新设置持续计时器，若不是零，那么死锁就被打破<br>    （2）TCP的传输效率:	<br>            Nagle算法：若发送应用进程要把发送的数据逐个字节地送到TCP发送缓存，则发送方就把第一个数据字节先发送出去，把后面到达的数据字节都缓存起来。<br>                       当发送方收到对第一个数据字符的确认后，再把发送缓存中的所有数据组装成一个报文发送出去，同时继续对后到达的数据进行缓存。只有在收到对前一个报文段的确认后才继续发送下一个报文段<br>            糊涂窗口综合征：接收缓存每次只能释放出1字节空间，然后把窗口设为1，向发送方发送确认，发送方又发来1字节数据，接收方发回确认，仍将窗口设为1字节，这样会使网络效率降低		<br>            解决方法：让接收方等待一段时间，使得接收缓存有足够空间容纳一个最大的报文段，或等接收缓存中有一半空闲空间。此时再发送确认报文</p>
<p> 8.TCP的拥塞控制<br>    拥塞：某段时间，若对网络中某资源的需求超过了该资源所能提供的可用部分，网络的性能就要变坏，这种现象称为拥塞<br>    TCP的拥塞控制方法：<br>        慢开始和拥塞避免：<br>            拥塞窗口：大小取决于网络的拥塞程度，并且动态的变化，发送方让自己的发送窗口等于拥塞窗口<br>            判断拥塞的依据：出现了超时<br>            发送方控制拥塞窗口的原则：只要没有出现拥塞，拥塞窗口就可以再增大一些，以便把更多分组发送出去，提高网络利用率；<br>                                      只要发生拥塞，就把拥塞窗口减小一些，以减少注入到网络种的分组数，以缓解网络出现的拥塞<br>            拥塞的判断：重传定时器超时、收到三个相同的ACK<br>            慢开始算法：由小到大成倍增大拥塞窗口数值<br>             拥塞避免算法：让拥塞窗口缓慢的增大，每经过一个RTT就把发送方的拥塞窗口+1，而不是像慢开始加倍增长		<br>            当拥塞窗口cwnd&lt;ssthresh时，使用慢开始算法<br>            当cwnd&gt;ssthresh时，停止使用慢开始而改用拥塞避免算法<br>        快重传算法：<br>            要求接收方不等待自己发送数据时才进行捎带确认，而是要立即发送确认，即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认<br>            发送方只要一连收到3个重复确认，就立即进行重传(即快重传)<br>        快恢复算法：<br>             发送方只是丢失个别报文，不启动慢开始而用快恢复算法，发送方调整门限值ssthresh&#x3D;cwnd&#x2F;2，同时设置拥塞窗口cwnd&#x3D;ssthresh，并开始执行拥塞避免算法<br>             发送方窗口的上限值：发送方的发送窗口一定不能超过对方给出的接收方窗口值rwnd；上限值应取接收方窗口和拥塞窗口这两个变量中较小的一个，即发送方窗口的上限值&#x3D; min(rwnd,cwnd)</p>
<p> 9.TCP的运输连接管理<br>     运输连接的三个阶段：连接建立、数据传送、连接释放<br>     客户-服务器方式：TCP连接建立采用客户服务器方式，主动发起连接建立的应用叫客户，而被动等待连接建立的应用进程叫服务器<br>     （1）TCP的连接建立：<br>        三次握手：<br>            最初两端TCP进程都处于关闭状态，开始时B的TCP服务器进程先创建传输控制块TCB，准备接受客户进程的连接请求，然后进入收听状态；</p>
<pre><code>        A的TCP客户进程也先创建TCB，然后打算建立TCP连接时，向B发送连接请求报文，这是首部中同步位SYN=1，同时选择一个初始序号seq=x，
        TCP规定，SYN报文段不能携带数据，但要消耗一个序号，这时TCP客户进程进入同步已发送状态；
        
        B收到连接请求报文后，若同意建立连接，则向A发送确认。在确认报文中将SYN位和ACK位都置1，确认号时ACK=x+1，
        同时也为自己选择一个初始序号seq=y。这个报文段也不能携带数据，但同样消耗一个序号，这时TCP服务器进程进入同步收到状态
        
        TCP客户进程收到B的确认后，还要向B给出确认。确认报文的ACK置1，确认号ack=y+1，而自己的序号seq=x+1。TCP规定，ACK报文段可以携带数据，
        但如果不携带数据则不消耗序号，这种情况，下一个数据报文段序号仍是seq=x+1。这时TCP连接已经建立，A进入已建立连接状态
 
        B收到A的确认后，也进入已建立连接状态
 
 （2）TCP连接的释放：
    四次挥手
        起始时A和B都处于已建立连接状态
        A的应用进程先向其TCP发出连接释放报文段，并停止再发送数据，主动关闭TCP连接，A把连接释放报文段首部的终止控制位FIN置1，序号seq=u，它等于前面已传送过的数据的最后一个字节的序号+1。
        这时A进入终止等待状态。FIN报文段即使不携带数据，也消耗一个序号

        B收到连接释放报文后发出确认，确认号是ack=u+1，而这个报文自己的序号是v，等于B前面已传送过的数据的最后一个字节的序号+1。
        然后B进入关闭等待状态，TCP服务器进程通知高层应用进程，因而从A到B这个方向的连接就释放了，这时的TCP连接处于半关闭状态，即A已经没有数据要发送了，但B若发送数据，A仍要接受

        A收到来自B的确认后，进入终止等待2状态，等待B发送的连接释放报文段

        若B已经没有要向A发送的数据，应用进程就通知TCP释放连接，此时B发出的连接释放报文段FIN=1，假定现在B的序号为w，B还必须重复上次已发送过的确认号ack=u+1，此时B进入最后确认状态，等待A的确认

        A在收到B的链接释放报文后，必须对此发出确认，在确认报文段中把ACK置1，确认号ack=w+1，而自己的序号时seq=u+1，然后进入时间等待状态。
        此时TCP连接还没有释放，必须经过时间等待计时器设置的时间2MSL后，A才进入关闭状态。
        
        A等待2MSL(报文最大生存时间)时间的原因：
            保证A发送的最后一个ACK报文段能够到达B   
            防止已失效的连接请求报文段出现在本连接中
</code></pre>
<h3 id="六、应用层"><a href="#六、应用层" class="headerlink" title="六、应用层"></a>六、应用层</h3><p> 1.域名系统DNS<br>    概述：<br>        域名系统DNS：是互联网使用的命名系统，用来把便于人们使用的机器名字转换为IP地址<br>        许多应用层软件经常使用域名系统DNS，但计算机的用户只是间接而不是直接使用DNS<br>        互联网采用层次结构的命名树作为主机的名字，并使用分布式的域名系统DNS<br>        DNS使大多数名字都在本地进行解析，仅少量解析需要互联网上通信</p>
<pre><code>    域名的解析过程：当需要把主机名解析成IP地址时，应用进程调用解析程序，并成为DNS的一个客户，把待解析的域名放在DNS请求报文中，
    以UDP用户数据报方式发给本地域名服务器，本地域名服务器查找域名后，把对应的IP地址放在回答报文中返回，应用进程获得目的主机的IP地址后即可进行通信
    
互联网的域名结构：
    互联网采用了层次树状结构的命名方法
    任何一个连接在互联网上的主机或路由器都有一个唯一的层次结构名字，即域名
    域是名字空间中一个可被管理的划分，域还可以划分为子域，而子域还可继续划分
    域名的组成：由标号序列组成，各标号之间用点隔开
    标号的规定：域名中的标号由英文字母和数字组成，每一个标号不超过63个字符，也不区分大小写；级别低的域名写在左边，级别高的写在右边；由多个标号组成的完整域名总共不超过255个字符
    域名是逻辑概念，并不代表计算机所在的物理地点
    顶级域名的分类：
        国家顶级域名：如cn、us
        通用顶级域名：如com、net、org、edu
        基础结构域名：只有arpa，用于反向域名解析，又称为反向域名
    二级域名：
        类别域名：ac、com、edu、gov
        行政区域名：bj、js
域名服务器：
    目的：为每一级的域名都设置一个对应的域名服务器，数量太多，效率低下。因此DNS采用划分区的办法
    区：一个服务器所负责的范围
    权限域名服务器：每一个区都设有，用来保存区中所有主机的域名到IP地址的映射
    
    分类：
        根域名服务器：是层次最高的域名服务器，也是最重要的。所有根域名服务器都知道所有顶级域名服务器的域名和IP地址。
                      任何本地域名服务器只要自己无法解析，就首先求助于根域名服务器
        顶级域名服务器：负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时，就给出相应的回答  
        权限域名服务器：负责一个区的域名服务器。当权限域名服务器还不能给出回答时，就会告诉发出查询请求的DNS客户，下一步应找哪一个权限域名服务器			
        本地域名服务器：并不属于域名服务器层次结构，但很重要。当主机发出DNS查询请求时，这个查询请求报文发给本地域名服务器
    提高域名服务器可靠性：
        DNS域名服务器把数据复制到几个域名服务器来保存，其中一个是主域名服务器，其余是辅助域名服务器。当主域名服务器出现故障时，辅助域名服务器就可以保证DNS的查询工作不会中断
    域名的解析过程：
        主机向本地域名服务器查询，采用递归查询：如果本地域名服务器不知道查询域名的IP，则本地域名服务器以DNS客户的身份，向其他根域名服务器继续发出查询请求报文，而不是让主机自己进行下一步查询。
                                                因此，递归查询返回的查询结构是查询的IP地址或报错，即无法查询到IP
        本地域名服务器向根域名服务器查询，采用迭代查询：当根域名服务器收到本地域名服务器发出的查询请求报文时，要么给出要查询的IP地址，要么告诉本地域名服务器下一步应向哪个域名服务器查询，然后让本地域名服务器进行后续查询。
                                                        根域名服务器通常把自己知道的顶级域名服务器的IP告诉本地域名服务器，让本地域名服务器再向顶级域名服务器查询
</code></pre>
<p> 2.文件传送协议FTP<br>    文件传输协议FTP时互联网上使用最广泛的文件传送协议，提供交互式访问，允许客户指明文件的类型与格式，并允许文件具有存取权限	<br>    要存取一个文件，必须先获得一个本地的文件副本，要修改文件，只能对副本进行修改，然后将修改后的文件副本传回原节点<br>    FTP的特点：只提供文件传送的基本服务，使用TCP可靠性传输服务，FTP的主要功能是减少或消除在不同操作系统下处理文件的不兼容性<br>    FTP工作流程：FTP使用客户服务器方式，一个FTP服务器进程可同时为多个客户进程提供服务，FTP的服务进程分为两大部分：主进程，负责接受新的请求；若干从属进程，负责处理单个请求<br>    主进程的工作步骤：<br>         (1)打开熟知端口(21)，使客户进程能够连接<br>         (2)等待客户进程发出连接请求<br>         (3)启动从属进程处理客户进程发来的请求。从属进程对客户进程的请求处理完毕后即终止，但从属进程在运行期间根据需要还可能创建一些子进程<br>         (4)回到等待状态，继续接受其他客户进程发来的请求。主进程与从属进程的处理是并发进行的<br>    FTP的两个TCP连接：	<br>        控制连接：在整个会话期间一直打开，FTP客户发出的传送请求，通过控制连接发送给服务器端；端口号21<br>        数据连接：用于传输文件；端口号20<br>        由于FTP使用两个不同的端口号，所以数据连接与控制连接不会发生混乱<br>        服务器端控制进程收到FTP客户发来的文件传输请求后，就创建数据传送进程和数据连接，用来连接客户端和服务端的数据传送进程</p>
<p> 3.简单文件传送协议TFTP<br>    TFTP：是很小且易于实现的文件传送协议，使用客户服务器方式，但使用UDP数据报，因此，TFTP需要有自己的差错改正措施，TFTP只支持文件传输而不支持交互。<br>          TFTP没有庞大的命令集，没有列目录功能，不能对用户进行身份识别<br>    优点：TFTP可用于UDP环境；TFTP代码所占的内存小	<br>    TFTP的主要特点：	<br>        (1)每次传送的数据报文中有512字节的数据，但最后一次可不足512字节<br>        (2)数据报文按序编号，从1开始<br>        (3)支持ASCII码或二进制传送<br>        (4)可对文件进行读或写<br>        (5)使用很简单的首部<br>    TFTP工作流程：<br>        TFTP客户进程发送一个请求报文给TFTP服务器进程，其熟知端口号为69。TFTP服务器进程选择一个新的端口和TFTP客户进程通信。<br>        若文件长度恰好为512字节整倍数，则文件传送完毕后，还必须在最后发送一个只含首部而无数据的数据报；<br>        若不是整倍数，则最后一个报文一定不足512字节，可作为文件结束的标志</p>
<p> 4.万维网WWW<br>    万维网是一个大规模联机式的信息储存所，用连接的方法能非常方便的从互联网上的一个站点访问另一个站点，从而主动按需获得信息；是一个分布式的超媒体系统，是超文本系统的扩充<br>    页面：在客户程序(浏览器)主窗口上显示出的万维网文档就是页面<br>    统一资源定位符URL：标志万维网上各种文档，使每个文档在互联网范围具有唯一标识符URL<br>        URL作用：用来表示从互联网上得到的资源位置和访问这些资源的方法<br>        URL的格式：&lt;协议&gt;:&#x2F;&#x2F;&lt;主机&gt;:&lt;端口&gt;&#x2F;&lt;路径&gt;<br>            协议：指出使用什么协议来获得该文档，常用HTTP或FTP<br>            主机：指出文档在哪台主机上，主机就是指该主机在互联网上的域名<br>            端口和路径：为了进一步定位，有事可省略</p>
<pre><code>超文本传送协议HTTP：是一个应用层协议，使用TCP进行可靠传送
    HTTP作用：定义了浏览器怎么向万维网服务器请求万维网文档，以及服务器怎么把文档传送给浏览器；是面向事物的应用层协议
    HTTP的主要特点：
        (1)HTTP本身是无连接的：虽然使用TCP连接，但通信双方在交换HTTP报文前不需要建立HTTP连接
        (2)HTTP是无状态的：同一个客户第二次访问同一服务器上的页面时，服务器的响应与第一次被访问时相同
    请求一个万维网文档所需时间是该文档的传输时间+两倍往返时间RTT
    HTTP/1.0的主要缺点：每请求一个文档就要有两倍的RTT的开销；这种非持续连接会使万维网服务器负担很重
    HTTP/1.1的改进：使用了持续连接；服务器在发送响应后仍在一段时间内保持连接，使同一个客户能继续在这条连接上传送后续HTTP请求报文和响应报文
    HTTP/1.1持续连接的两种工作方式：
        非流水线方式：客户在收到响应报文之后才能继续发送
        流水线方式：客户收到响应报文之前也可以继续发送
        
</code></pre>
<p> 5.动态主机配置协议DHCP	<br>    主机如何获得IP地址？<br>    动态主机配置协议DHCP是应用层协议，基于UDP。<br>    DHCP作用：提供一种机制，称为即插即用连网，允许一台计算机加入网络和动态获取IP而不用手工参与<br>    协议配置：在协议软件中给参数赋值的动作叫做协议配置<br>    需要配置的项目：IP地址、子网掩码、默认路由器的IP地址、域名服务器的IP地址<br>    DHCP工作方式：<br>        (1)DHCP使用客户服务器方式<br>        (2)需要IP地址的主机在启动时向DHCP服务器广播发送发现报文，这时该主机就成为DHCP客户<br>        (3)本地网络上所有主机都能收到该报文，但只有DHCP服务器才回复此报文	<br>        (4)DHCP服务器先在其数据库中查找该计算机的配置信息，若找到，则返回找到的信息，若找不到，则从服务器IP地址池中取一个地址分配给该计算机	<br>        (5)DHCP服务器的回答报文叫提供报文，表示提供了IP地址等配置信息	<br>    DHCP中继代理：并不是每个网络上都有DHCP服务器，因为这样会使DHCP服务器数量过多，因此现在是使每个网络至少有一个DHCP中继代理，它配置了DHCP服务器的IP地址信息		<br>    DHCP中继代理工作流程：<br>        当DHCP中继代理收到主机A以广播形式发送的发现报文后，就以单播方式向DHCP服务器转发此报文，并等待其回答<br>        收到DHCP服务器回应的提供报文后，DHCP中继代理再把此提供报文发回给主机A<br>    DHCP工作流程：<br>        1：DHCP服务器被动打开UDP端口67，等待客户端发来的报文<br>        2：DHCP客户从UDP端口68发送DHCP发现报文<br>        3：所有收到DHCP发现报文的服务器都会发出DHCP提供报文，因此客户可能收到多个DHCP提供报文<br>        4：客户从几个DHCP服务器中选择一个，并向其发送DHCP请求报文<br>        5：被选中的服务器发送确认报文DHCPACK，此时客户就可以使用这个IP地址了，这种状态叫已绑定状态；<br>           DHCP客户现在要根据服务器提供的租用期T设置两个计时器T1和T2，它们的超时时间分别为0.5T和0.875T，当超时时间到了就要请求更新租用期		<br>        6：租用期过半，DHCP发送请求报文，要求更新租用期	<br>        7：服务器若同意，则发回确认报文。客户得到了新的租用期，重置计时器		<br>        8：服务器若不同意，则发回否认报文。这是客户停止使用原来的IP地址，而重新申请新IP地址(回到步骤2)<br>        9：客户可以随时提前终止服务器所提供的租用期，这时只需向DHCP服务器发送释放报文即可</p>

                
            </div>
            <hr/>

            

    <div class="reprint" id="reprint-statement">
        
            <div class="reprint__author">
                <span class="reprint-meta" style="font-weight: bold;">
                    <i class="fas fa-user">
                        文章作者:
                    </i>
                </span>
                <span class="reprint-info">
                    <a href="/shiqing/about" rel="external nofollow noreferrer">ShiQing</a>
                </span>
            </div>
            <div class="reprint__type">
                <span class="reprint-meta" style="font-weight: bold;">
                    <i class="fas fa-link">
                        文章链接:
                    </i>
                </span>
                <span class="reprint-info">
                    <a href="https://shiqing.gitee.io/shiqing/2020/11/12/cao-zuo-xi-tong/ji-suan-ji-wang-luo-fu-xi/">https://shiqing.gitee.io/shiqing/2020/11/12/cao-zuo-xi-tong/ji-suan-ji-wang-luo-fu-xi/</a>
                </span>
            </div>
            <div class="reprint__notice">
                <span class="reprint-meta" style="font-weight: bold;">
                    <i class="fas fa-copyright">
                        版权声明:
                    </i>
                </span>
                <span class="reprint-info">
                    本博客所有文章除特別声明外，均采用
                    <a href="https://creativecommons.org/licenses/by/4.0/deed.zh" rel="external nofollow noreferrer" target="_blank">CC BY 4.0</a>
                    许可协议。转载请注明来源
                    <a href="/shiqing/about" target="_blank">ShiQing</a>
                    !
                </span>
            </div>
        
    </div>

    <script async defer>
      document.addEventListener("copy", function (e) {
        let toastHTML = '<span>复制成功，请遵循本文的转载规则</span><button class="btn-flat toast-action" onclick="navToReprintStatement()" style="font-size: smaller">查看</a>';
        M.toast({html: toastHTML})
      });

      function navToReprintStatement() {
        $("html, body").animate({scrollTop: $("#reprint-statement").offset().top - 80}, 800);
      }
    </script>



            <div class="tag_share" style="display: block;">
                <div class="post-meta__tag-list" style="display: inline-block;">
                    
                        <div class="article-tag">
                            
                                <a href="/shiqing/tags/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80/">
                                    <span class="chip bg-color">计算机基础</span>
                                </a>
                            
                        </div>
                    
                </div>
                <div class="post_share" style="zoom: 80%; width: fit-content; display: inline-block; float: right; margin: -0.15rem 0;">
                    <link rel="stylesheet" type="text/css" href="/shiqing/libs/share/css/share.min.css">
<div id="article-share">

    
    <div class="social-share" data-sites="twitter,facebook,google,qq,qzone,wechat,weibo,douban,linkedin" data-wechat-qrcode-helper="<p>微信扫一扫即可分享！</p>"></div>
    <script src="/shiqing/libs/share/js/social-share.min.js"></script>
    

    

</div>

                </div>
            </div>
            
                <style>
    #reward {
        margin: 40px 0;
        text-align: center;
    }

    #reward .reward-link {
        font-size: 1.4rem;
        line-height: 38px;
    }

    #reward .btn-floating:hover {
        box-shadow: 0 6px 12px rgba(0, 0, 0, 0.2), 0 5px 15px rgba(0, 0, 0, 0.2);
    }

    #rewardModal {
        width: 320px;
        height: 350px;
    }

    #rewardModal .reward-title {
        margin: 15px auto;
        padding-bottom: 5px;
    }

    #rewardModal .modal-content {
        padding: 10px;
    }

    #rewardModal .close {
        position: absolute;
        right: 15px;
        top: 15px;
        color: rgba(0, 0, 0, 0.5);
        font-size: 1.3rem;
        line-height: 20px;
        cursor: pointer;
    }

    #rewardModal .close:hover {
        color: #ef5350;
        transform: scale(1.3);
        -moz-transform:scale(1.3);
        -webkit-transform:scale(1.3);
        -o-transform:scale(1.3);
    }

    #rewardModal .reward-tabs {
        margin: 0 auto;
        width: 210px;
    }

    .reward-tabs .tabs {
        height: 38px;
        margin: 10px auto;
        padding-left: 0;
    }

    .reward-content ul {
        padding-left: 0 !important;
    }

    .reward-tabs .tabs .tab {
        height: 38px;
        line-height: 38px;
    }

    .reward-tabs .tab a {
        color: #fff;
        background-color: #ccc;
    }

    .reward-tabs .tab a:hover {
        background-color: #ccc;
        color: #fff;
    }

    .reward-tabs .wechat-tab .active {
        color: #fff !important;
        background-color: #22AB38 !important;
    }

    .reward-tabs .alipay-tab .active {
        color: #fff !important;
        background-color: #019FE8 !important;
    }

    .reward-tabs .reward-img {
        width: 210px;
        height: 210px;
    }
</style>

<div id="reward">
    <a href="#rewardModal" class="reward-link modal-trigger btn-floating btn-medium waves-effect waves-light red">赏</a>

    <!-- Modal Structure -->
    <div id="rewardModal" class="modal">
        <div class="modal-content">
            <a class="close modal-close"><i class="fas fa-times"></i></a>
            <h4 class="reward-title">你的赏识是我前进的动力</h4>
            <div class="reward-content">
                <div class="reward-tabs">
                    <ul class="tabs row">
                        <li class="tab col s6 alipay-tab waves-effect waves-light"><a href="#alipay">支付宝</a></li>
                        <li class="tab col s6 wechat-tab waves-effect waves-light"><a href="#wechat">微 信</a></li>
                    </ul>
                    <div id="alipay">
                        <img src="/shiqing/medias/reward/alipay.jpg" class="reward-img" alt="支付宝打赏二维码">
                    </div>
                    <div id="wechat">
                        <img src="/shiqing/medias/reward/wechat.png" class="reward-img" alt="微信打赏二维码">
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<script>
    $(function () {
        $('.tabs').tabs();
    });
</script>

            
        </div>
    </div>

    

    

    

    

    

    

    

    

<article id="prenext-posts" class="prev-next articles">
    <div class="row article-row">
        
        <div class="article col s12 m6" data-aos="fade-up">
            <div class="article-badge left-badge text-color">
                <i class="fas fa-chevron-left"></i>&nbsp;上一篇</div>
            <div class="card">
                <a href="/shiqing/2020/11/14/github-upload/">
                    <div class="card-image">
                        
                        
                        <img src="/shiqing/medias/featureimages/9.jpg" class="responsive-img" alt="&#39;github_upload&#39;">
                        
                        <span class="card-title">&#39;github_upload&#39;</span>
                    </div>
                </a>
                <div class="card-content article-content">
                    <div class="summary block-with-text">
                        
                            github上传项目
                        
                    </div>
                    <div class="publish-info">
                        <span class="publish-date">
                            <i class="far fa-clock fa-fw icon-date"></i>2020-11-14
                        </span>
                        <span class="publish-author">
                            
                            <i class="fas fa-bookmark fa-fw icon-category"></i>
                            
                            <a href="/shiqing/categories/%E4%BB%A3%E7%A0%81%E7%AE%A1%E7%90%86/" class="post-category">
                                    代码管理
                                </a>
                            
                            
                        </span>
                    </div>
                </div>
                
                <div class="card-action article-tags">
                    
                    <a href="/shiqing/tags/%E4%BB%A3%E7%A0%81%E7%AE%A1%E7%90%86/">
                        <span class="chip bg-color">代码管理</span>
                    </a>
                    
                </div>
                
            </div>
        </div>
        
        
        <div class="article col s12 m6" data-aos="fade-up">
            <div class="article-badge right-badge text-color">
                下一篇&nbsp;<i class="fas fa-chevron-right"></i>
            </div>
            <div class="card">
                <a href="/shiqing/2020/10/26/java-ji-chu/datatype/">
                    <div class="card-image">
                        
                        
                        <img src="/shiqing/medias/featureimages/20.jpg" class="responsive-img" alt="&#39;DataType&#39;">
                        
                        <span class="card-title">&#39;DataType&#39;</span>
                    </div>
                </a>
                <div class="card-content article-content">
                    <div class="summary block-with-text">
                        
                            数组,字符串,集合等等总结
                        
                    </div>
                    <div class="publish-info">
                            <span class="publish-date">
                                <i class="far fa-clock fa-fw icon-date"></i>2020-10-26
                            </span>
                        <span class="publish-author">
                            
                            <i class="fas fa-bookmark fa-fw icon-category"></i>
                            
                            <a href="/shiqing/categories/Java/" class="post-category">
                                    Java
                                </a>
                            
                            
                        </span>
                    </div>
                </div>
                
                <div class="card-action article-tags">
                    
                    <a href="/shiqing/tags/Java%E5%9F%BA%E7%A1%80/">
                        <span class="chip bg-color">Java基础</span>
                    </a>
                    
                </div>
                
            </div>
        </div>
        
    </div>
</article>

</div>



<!-- 代码块功能依赖 -->
<script type="text/javascript" src="/shiqing/libs/codeBlock/codeBlockFuction.js"></script>

<!-- 代码语言 -->

<script type="text/javascript" src="/shiqing/libs/codeBlock/codeLang.js"></script>


<!-- 代码块复制 -->

<script type="text/javascript" src="/shiqing/libs/codeBlock/codeCopy.js"></script>


<!-- 代码块收缩 -->

<script type="text/javascript" src="/shiqing/libs/codeBlock/codeShrink.js"></script>


    </div>
    <div id="toc-aside" class="expanded col l3 hide-on-med-and-down">
        <div class="toc-widget card" style="background-color: white;">
            <div class="toc-title"><i class="far fa-list-alt"></i>&nbsp;&nbsp;目录</div>
            <div id="toc-content"></div>
        </div>
    </div>
</div>

<!-- TOC 悬浮按钮. -->

<div id="floating-toc-btn" class="hide-on-med-and-down">
    <a class="btn-floating btn-large bg-color">
        <i class="fas fa-list-ul"></i>
    </a>
</div>


<script src="/shiqing/libs/tocbot/tocbot.min.js"></script>
<script>
    $(function () {
        tocbot.init({
            tocSelector: '#toc-content',
            contentSelector: '#articleContent',
            headingsOffset: -($(window).height() * 0.4 - 45),
            collapseDepth: Number('0'),
            headingSelector: 'h2, h3, h4'
        });

        // modify the toc link href to support Chinese.
        let i = 0;
        let tocHeading = 'toc-heading-';
        $('#toc-content a').each(function () {
            $(this).attr('href', '#' + tocHeading + (++i));
        });

        // modify the heading title id to support Chinese.
        i = 0;
        $('#articleContent').children('h2, h3, h4').each(function () {
            $(this).attr('id', tocHeading + (++i));
        });

        // Set scroll toc fixed.
        let tocHeight = parseInt($(window).height() * 0.4 - 64);
        let $tocWidget = $('.toc-widget');
        $(window).scroll(function () {
            let scroll = $(window).scrollTop();
            /* add post toc fixed. */
            if (scroll > tocHeight) {
                $tocWidget.addClass('toc-fixed');
            } else {
                $tocWidget.removeClass('toc-fixed');
            }
        });

        
        /* 修复文章卡片 div 的宽度. */
        let fixPostCardWidth = function (srcId, targetId) {
            let srcDiv = $('#' + srcId);
            if (srcDiv.length === 0) {
                return;
            }

            let w = srcDiv.width();
            if (w >= 450) {
                w = w + 21;
            } else if (w >= 350 && w < 450) {
                w = w + 18;
            } else if (w >= 300 && w < 350) {
                w = w + 16;
            } else {
                w = w + 14;
            }
            $('#' + targetId).width(w);
        };

        // 切换TOC目录展开收缩的相关操作.
        const expandedClass = 'expanded';
        let $tocAside = $('#toc-aside');
        let $mainContent = $('#main-content');
        $('#floating-toc-btn .btn-floating').click(function () {
            if ($tocAside.hasClass(expandedClass)) {
                $tocAside.removeClass(expandedClass).hide();
                $mainContent.removeClass('l9');
            } else {
                $tocAside.addClass(expandedClass).show();
                $mainContent.addClass('l9');
            }
            fixPostCardWidth('artDetail', 'prenext-posts');
        });
        
    });
</script>

    

</main>




        <footer class="page-footer bg-color">
    
    <div class="container row center-align" style="margin-bottom: 0px !important;">
        <div class="col s12 m8 l8 copy-right">
            Copyright&nbsp;&copy;
            
                <span id="year">2019-2024</span>
            
            <span id="year">2019</span>
            <a href="/shiqing/about" target="_blank">ShiQing</a>
            |&nbsp;Powered by&nbsp;<a href="https://hexo.io/" target="_blank">Hexo</a>
            |&nbsp;Theme&nbsp;<a href="https://github.com/blinkfox/hexo-theme-matery" target="_blank">Matery</a>
            <br>
            
            
            
            
            
            
            <span id="busuanzi_container_site_pv">
                |&nbsp;<i class="far fa-eye"></i>&nbsp;总访问量:&nbsp;<span id="busuanzi_value_site_pv"
                    class="white-color"></span>&nbsp;次
            </span>
            
            
            <span id="busuanzi_container_site_uv">
                |&nbsp;<i class="fas fa-users"></i>&nbsp;总访问人数:&nbsp;<span id="busuanzi_value_site_uv"
                    class="white-color"></span>&nbsp;人
            </span>
            
            <br>
            
            <br>
            
        </div>
        <div class="col s12 m4 l4 social-link social-statis">
    <a href="https://github.com/blinkfox" class="tooltipped" target="_blank" data-tooltip="访问我的GitHub" data-position="top" data-delay="50">
        <i class="fab fa-github"></i>
    </a>



    <a href="mailto:2528393970@qq.com" class="tooltipped" target="_blank" data-tooltip="邮件联系我" data-position="top" data-delay="50">
        <i class="fas fa-envelope-open"></i>
    </a>



    <a href="tencent://AddContact/?fromId=50&fromSubId=1&subcmd=all&uin=2528393970" class="tooltipped" target="_blank" data-tooltip="QQ联系我: 2528393970" data-position="top" data-delay="50">
        <i class="fab fa-qq"></i>
    </a>







    <a href="/shiqing/atom.xml" class="tooltipped" target="_blank" data-tooltip="RSS 订阅" data-position="top" data-delay="50">
        <i class="fas fa-rss"></i>
    </a>

</div>
    </div>
</footer>

<div class="progress-bar"></div>


        <!-- 搜索遮罩框 -->
<div id="searchModal" class="modal">
    <div class="modal-content">
        <div class="search-header">
            <span class="title"><i class="fas fa-search"></i>&nbsp;&nbsp;搜索</span>
            <input type="search" id="searchInput" name="s" placeholder="请输入搜索的关键字"
                   class="search-input">
        </div>
        <div id="searchResult"></div>
    </div>
</div>

<script type="text/javascript">
$(function () {
    var searchFunc = function (path, search_id, content_id) {
        'use strict';
        $.ajax({
            url: path,
            dataType: "xml",
            success: function (xmlResponse) {
                // get the contents from search data
                var datas = $("entry", xmlResponse).map(function () {
                    return {
                        title: $("title", this).text(),
                        content: $("content", this).text(),
                        url: $("url", this).text()
                    };
                }).get();
                var $input = document.getElementById(search_id);
                var $resultContent = document.getElementById(content_id);
                $input.addEventListener('input', function () {
                    var str = '<ul class=\"search-result-list\">';
                    var keywords = this.value.trim().toLowerCase().split(/[\s\-]+/);
                    $resultContent.innerHTML = "";
                    if (this.value.trim().length <= 0) {
                        return;
                    }
                    // perform local searching
                    datas.forEach(function (data) {
                        var isMatch = true;
                        var data_title = data.title.trim().toLowerCase();
                        var data_content = data.content.trim().replace(/<[^>]+>/g, "").toLowerCase();
                        var data_url = data.url;
                        data_url = data_url.indexOf('/') === 0 ? data.url : '/' + data_url;
                        var index_title = -1;
                        var index_content = -1;
                        var first_occur = -1;
                        // only match artiles with not empty titles and contents
                        if (data_title !== '' && data_content !== '') {
                            keywords.forEach(function (keyword, i) {
                                index_title = data_title.indexOf(keyword);
                                index_content = data_content.indexOf(keyword);
                                if (index_title < 0 && index_content < 0) {
                                    isMatch = false;
                                } else {
                                    if (index_content < 0) {
                                        index_content = 0;
                                    }
                                    if (i === 0) {
                                        first_occur = index_content;
                                    }
                                }
                            });
                        }
                        // show search results
                        if (isMatch) {
                            str += "<li><a href='" + data_url + "' class='search-result-title'>" + data_title + "</a>";
                            var content = data.content.trim().replace(/<[^>]+>/g, "");
                            if (first_occur >= 0) {
                                // cut out 100 characters
                                var start = first_occur - 20;
                                var end = first_occur + 80;
                                if (start < 0) {
                                    start = 0;
                                }
                                if (start === 0) {
                                    end = 100;
                                }
                                if (end > content.length) {
                                    end = content.length;
                                }
                                var match_content = content.substr(start, end);
                                // highlight all keywords
                                keywords.forEach(function (keyword) {
                                    var regS = new RegExp(keyword, "gi");
                                    match_content = match_content.replace(regS, "<em class=\"search-keyword\">" + keyword + "</em>");
                                });

                                str += "<p class=\"search-result\">" + match_content + "...</p>"
                            }
                            str += "</li>";
                        }
                    });
                    str += "</ul>";
                    $resultContent.innerHTML = str;
                });
            }
        });
    };

    searchFunc('/shiqing/search.xml', 'searchInput', 'searchResult');
});
</script>

        <!-- 回到顶部按钮 -->
<div id="backTop" class="top-scroll">
    <a class="btn-floating btn-large waves-effect waves-light" href="#!">
        <i class="fas fa-arrow-up"></i>
    </a>
</div>


        <script src="/shiqing/libs/materialize/materialize.min.js"></script>
        <script src="/shiqing/libs/masonry/masonry.pkgd.min.js"></script>
        <script src="/shiqing/libs/aos/aos.js"></script>
        <script src="/shiqing/libs/scrollprogress/scrollProgress.min.js"></script>
        <script src="/shiqing/libs/lightGallery/js/lightgallery-all.min.js"></script>
        <script src="/shiqing/js/matery.js"></script>

        <!-- Baidu Analytics -->

        <!-- Baidu Push -->

<script>
    (function () {
        var bp = document.createElement('script');
        var curProtocol = window.location.protocol.split(':')[0];
        if (curProtocol === 'https') {
            bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
        } else {
            bp.src = 'http://push.zhanzhang.baidu.com/push.js';
        }
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(bp, s);
    })();
</script>

        
        <script src="/shiqing/libs/others/clicklove.js" async="async"></script>
        
        
        <script async src="/shiqing/libs/others/busuanzi.pure.mini.js"></script>
        

        <script type="text/javascript">
            var OriginTitile = document.title,
                st;
            document.addEventListener("visibilitychange", function () {
                document.hidden ? (document.title = "看不见我~看不见我~", clearTimeout(st)) : (document.title =
                    "(๑•̀ㅂ•́) ✧被发现了～", st = setTimeout(function () {
                        document.title = OriginTitile
                    }, 3e3))
            })
        </script>

        <!-- 背景樱花飘落特效 -->
        
            <script type="text/javascript">
                //只在桌面版网页启用特效
                var windowWidth = $(window).width();
                if (windowWidth > 768) {
                    document.write('<script type="text/javascript" src="/js/xuehuapiaoluo.js"><\/script>');
                }
            </script>
        

        

        


        
        

        

        

        
        <script src="/shiqing/libs/instantpage/instantpage.js" type="module"></script>
        

    </body>

</html>
